﻿using System.Diagnostics.Contracts;
using System.Linq;

namespace IMModel.Domain
{
    /// <summary>
    /// Персона
    /// </summary>
    public partial class Person
    {
        public override string ToString()
        {
            return FullName;
        }

        /// <summary>
        /// Получает полное имя персоны
        /// </summary>
        public string FullName { get { return string.Format("{0} {1} {2}", LastName, FirstName, Patronymic); } }

        /// <summary>
        /// Получает полное имя персоны с удалением пробелов
        /// </summary>
        public string FullNameTrim { get { return string.Format("{0} {1} {2}", LastName.Trim(), FirstName.Trim(), Patronymic.Trim()); } }

        /// <summary>
        /// Получает краткое имя персоны в виде Фамилия И. О.
        /// </summary>
        public string ShortName
        {
            get
            {
                Contract.Requires(HasCorrectName);
                return string.Format("{0} {1}. {2}.", LastName, FirstName.First(), Patronymic.First());
            }
        }

        /// <summary>
        /// Определяет, заданы ли у персоны ФИО
        /// </summary>
        public bool HasCorrectName
        {
            get
            {
                return !(string.IsNullOrWhiteSpace(LastName) && string.IsNullOrWhiteSpace(FirstName) && string.IsNullOrWhiteSpace(Patronymic));
            }
        }

        internal Degree GetDegree(Term term)
        {
            var t = term.Stop;
            var d = PersonDegrees.Where(x => x.Term.Start < t).OrderBy(x => x.Term.Start);
            return d.Any() ? d.Last().Degree : null;
        }
    }
}